import random

def display_menu():
    """显示菜单界面"""
    print("\n=== 猜数字游戏 ===")
    print("1. 开始游戏")
    print("2. 设置数字范围")
    print("3. 设置可猜次数")
    print("4. 结束游戏")
    choice = input("请输入你的选择（1-4）：")
    return choice

def get_valid_input(prompt, input_type=int, min_value=None, max_value=None):
    """获取有效输入"""
    while True:
        try:
            value = input_type(input(prompt))
            if min_value is not None and value < min_value:
                print(f"输入值不能小于 {min_value}，请重新输入！")
                continue
            if max_value is not None and value > max_value:
                print(f"输入值不能大于 {max_value}，请重新输入！")
                continue
            return value
        except ValueError:
            print("输入无效，请输入一个有效的数字！")

def play_game(number_range, max_attempts):
    """开始游戏"""
    target = random.randint(number_range[0], number_range[1])
    attempts = 0

    print(f"\n游戏开始！目标数字在 {number_range[0]} 到 {number_range[1]} 之间，你有 {max_attempts} 次机会。")

    while attempts < max_attempts:
        guess = get_valid_input(f"请输入你的猜测（{number_range[0]}-{number_range[1]}），或输入 -1 退出游戏：", min_value=-1, max_value=number_range[1])

        if guess == -1:
            print("你选择退出游戏。")
            return False  # 游戏未完成

        attempts += 1

        if guess < target:
            print("太小了！")
        elif guess > target:
            print("太大了！")
        else:
            print(f"恭喜你！你猜对了！目标数字是 {target}。")
            print(f"你用了 {attempts} 次机会。")
            return True  # 游戏胜利

    print(f"很遗憾，你没有在 {max_attempts} 次内猜对。正确答案是 {target}。")
    return False  # 游戏失败

def main():
    """主程序"""
    number_range = [1, 100]  # 默认数字范围
    max_attempts = 5  # 默认可猜次数

    while True:
        choice = display_menu()

        if choice == "1":
            # 开始游戏
            result = play_game(number_range, max_attempts)
            if result:
                restart = input("是否重新开始游戏？（y/n）：").lower()
                if restart != "y":
                    print("感谢游玩，再见！")
                    break
            else:
                restart = input("是否重新开始游戏？（y/n）：").lower()
                if restart != "y":
                    print("感谢游玩，再见！")
                    break

        elif choice == "2":
            # 设置数字范围
            print("\n设置数字范围：")
            min_value = get_valid_input("请输入最小数字：", min_value=1)
            max_value = get_valid_input("请输入最大数字：", min_value=min_value + 1)
            number_range = [min_value, max_value]
            print(f"数字范围已设置为 {min_value} 到 {max_value}。")

        elif choice == "3":
            # 设置可猜次数
            max_attempts = get_valid_input("请输入可猜次数：", min_value=1)
            print(f"可猜次数已设置为 {max_attempts} 次。")

        elif choice == "4":
            # 结束游戏
            print("感谢游玩，再见！")
            break

        else:
            print("无效选择，请输入 1-4 之间的数字！")

if __name__ == "__main__":
    main()